//
//  HYStatusCell.swift
//  weibo-01
//
//  Created by 源 何 on 16/9/27.
//  Copyright © 2016年 何源. All rights reserved.
//

import UIKit

let commonMargin : CGFloat = 8
//图片之间的间距
private let pictureCellMargin : CGFloat = 3
//计算图片的宽度
private let maxWidth = ScreenWidth - 2 * commonMargin
private let itemWidth = (maxWidth - 2 * pictureCellMargin) / 3

class HYStatusCell: UITableViewCell {
    
    //用户头像
    @IBOutlet weak var iconView: UIImageView!
    //用户名称
    @IBOutlet weak var nameLabel: UILabel!
    //用户等级
    @IBOutlet weak var memberImage: UIImageView!
    //微博创建时间
    @IBOutlet weak var timeLabel: UILabel!
    //微博来源
    @IBOutlet weak var sourceLabel: UILabel!
    //微博正文
    @IBOutlet weak var contentLabel: UILabel!
    //微博认证类型
    @IBOutlet weak var avatarImage: UIImageView!
    //配图视图
    @IBOutlet weak var pictureView: HYPictureView!
    //配图视图的宽度约束对象
    @IBOutlet weak var pictureViewWidthCons: NSLayoutConstraint!
    //配图视图的高度约束对象
    @IBOutlet weak var pictureViewHeightCons: NSLayoutConstraint!
    //配图视图的布局对象
    @IBOutlet weak var pictureViewLayout: UICollectionViewFlowLayout!
    //配图视图的顶部间距
    @IBOutlet weak var pictureViewTopCons: NSLayoutConstraint!
    //评论
    @IBOutlet weak var commentBtn: UIButton!
    //转发
    @IBOutlet weak var repostBtn: UIButton!
    //点赞
    @IBOutlet weak var ohYeahBtn: UIButton!
    
    @IBOutlet weak var toolBar: UIView!
    
    
    //被转发的原创微博的正文
    //隐式的可选类型 实际上就是一个可选类型 不过在使用没有可选类型的特征
    //系统非常自信能够确保你在使用该空间的时候 该空间一定是被实例化好的
    @IBOutlet weak var retweetedLabel: UILabel!
    
    func rowHeight(viewmodel: HYStatusViewModel) -> CGFloat{
        //给属性赋值
        self.viewmodel = viewmodel
        //提前刷新布局,如果不加layoutIfNeeded 这个控件的frame只是在将要显示的时候才会被计算
        //提前刷新布局
        self.contentView.layoutIfNeeded()
        return toolBar.frame.maxY
    }
    
    //绑定数据
    var viewmodel : HYStatusViewModel?{
        didSet{
            //设置视图的数据
            iconView.sd_setImage(with: viewmodel?.iconURL)
            timeLabel.text = viewmodel?.status?.created_at
            sourceLabel.text = viewmodel?.status?.source
            contentLabel.text = viewmodel?.status?.text
            avatarImage.image = viewmodel?.avatarImage
            memberImage.image = viewmodel?.memberImage
            nameLabel.text = viewmodel?.status?.user?.name
            
            //一旦设置了数据 就应该立即更新配图视图的大小的约束
            let count = viewmodel?.pictureInfos?.count ?? 0
            let pSize = changePictureViewSize(count: count)
            //更新约束值
            pictureViewWidthCons.constant = pSize.width
            pictureViewHeightCons.constant = pSize.height
            //根据是否有配图调整顶部间距
            pictureViewTopCons.constant = (count == 0 ? 0 : commonMargin)
            //给配图视图设置数据源
            pictureView.pictureInfos = viewmodel?.pictureInfos
            //给底部工具条的按钮赋值
            commentBtn.setTitle(viewmodel?.comment_text, for: .normal)
            repostBtn.setTitle(viewmodel?.repost_text, for: .normal)
            ohYeahBtn.setTitle(viewmodel?.ohYeah_text, for: .normal)
            //只能够对可选类型做可选/强制解包
            retweetedLabel?.text = viewmodel?.status?.retweeted_status?.text
        }
    }
    
    //根据图片的张数来计算配图视图的大小
    private func changePictureViewSize(count: Int) -> CGSize{
        
        //0张图片
        if count == 0 {
            return CGSize.zero
        }
        //4张图片
        if count == 4 {
            let width = itemWidth * 2 + pictureCellMargin
            return CGSize(width: width, height: width)
        }
        //其他 1,2,3,5,6,7,8,9 -> 3 * n
        //已知个数 和 列数 来计算 函数
        let rowCount = CGFloat((count - 1) / 3 + 1)
        let height = rowCount * itemWidth + (rowCount - 1) * pictureCellMargin
        return CGSize(width: maxWidth, height: height)
    }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        //设置cell的选中样式
        selectionStyle = .none
        
        //设置contentLabel的最大布局宽度
        //能够在viewdidload 或者 awakefromnib 中完成设置就尽量不要放在layoutsubviews 和 viewdidlayoutsubviews 方法
        contentLabel.preferredMaxLayoutWidth = ScreenWidth - 2 * commonMargin
        retweetedLabel?.preferredMaxLayoutWidth = ScreenWidth - 2 * commonMargin
        
        //设置配图视图的布局对象
        pictureViewLayout.itemSize = CGSize(width: itemWidth, height: itemWidth)
        
        //设置间距
        //行间距 默认的间距: 10
        pictureViewLayout.minimumLineSpacing = pictureCellMargin
        pictureViewLayout.minimumInteritemSpacing = pictureCellMargin
    }
}
